gusucode.com > VC++ RingSDK界面库 > VC++ RingSDK界面库/code/example/advance/coolmenu/coolmenu.cpp

    /**********************************************************************
//
//
//        ##########                          ######  #########   # ######    #
//      #############                      ########### ######### #########  ###
//     ######## # ###  ##                 ############# ##    ## #####  # ####
//     ####  ##    ## ###                 ###     ### # #      #####   #####
//          #     ###  #            #     ##       ##  ##      ##     ###
//         ## ###### ##      ##  ####    ####          #       #     ##
//       #########  ###  ## ### #######   ######      ##      ##    ###
//      ######      ##  ######  ##  ##       ####     #      ##     ####
//     #######     ##   ###### ##  ###          ##   ##     ###    ######
//     #########   ##  ###### ## ######         ### ##    ###      #  #####
//    ##    ###### ####### ### #### ##  ## #######  ########      ##    ####
//    ##      #### ###  #  ### ### ##  ##########   ######       ##      ####
//   ##         ##                ##   #########    ####         #         ##
//               #              ###
//                              ##
//                             ###
//                             ##
//
//
//							RingSDK演示程序
//作者:临风
//
//e-mail:ringphone@sina.com
//
//原文件:coolmenu.exe
//
//演示类OICQ,WindowsXP风格的菜单
//
**********************************************************************/
#include "ringmain.h"
#include "resource.h"

BEGIN_SETUPMAINWINDOW(IS_WINDOW)
	BEGIN_DEF_VAR(NO_INIT)
		RingCoolMenu *rm,*rmXP;
		int count;
		HBITMAP hbmMarker,hbmBkg,hbmHilight,hbmTemp;
		HICON hicoC,hicoD;
		BOOL bInShowBkg,bShowRect,bPopupXP;
		COLORREF crText;
	END_DEF_VAR

	BEGIN_DEFMSG
		DEFMSG(WM_DESTROY)
		DEFMSG(WM_CREATE)
		DEFMSG(WM_RBUTTONDOWN)
		DEFCMD(OnShowMarker)
		DEFCMD(OnShowBkgBmp)
		DEFCMD(OnShowBkgColor)
		DEFCMD(OnShowSelBmp)
		DEFCMD(OnShowIcon)
		DEFCMD(OnAddItem)
		DEFCMD(OnDelItem)
		DEFCMD(OnExit)
	END_DEFMAINMSG
END_SETUPMAINWINDOW

BEGIN_REGMAINMSG	
	REGCMD(CM_SHOWCOPYRIGHT,OnShowMarker)
	REGCMD(CM_SHOWBKG,OnShowBkgBmp)
	REGCMD(CM_SHOWBKGCOLOR,OnShowBkgColor)
	REGCMD(CM_SHOWSELECTBKG,OnShowSelBmp)
	REGCMD(CM_SHOWICON,OnShowIcon)
	REGCMD(CM_ADDMENUITEM,OnAddItem)
	REGCMD(CM_DELMENUITEM,OnDelItem)
	REGMSG(WM_RBUTTONDOWN)
	REGCMD(CM_EXIT,OnExit)
	REGMSG(WM_DESTROY)
	REGMSG(WM_CREATE)
END_REGMSG

int RingMain()
{
	APP_CREATEWINDOW("RingSDK菜单演示","RingSDKApp",WS_OVERLAPPEDWINDOW,MAKEINTRESOURCE(IDM_MENU));
   return RingApp.Run();
}

RINGMAINMSG(WM_DESTROY)
{
	if(hbmMarker == NULL)
		hbmMarker = rm->SubMenu(0)->SetMarker(NULL);
	if(hbmMarker)
		DeleteObject(hbmMarker);
	if(hbmHilight == NULL)
		hbmHilight = rm->SetSelectBkg(NULL);
	if(hbmHilight)
		DeleteObject(hbmHilight);
	DeleteObject(hbmBkg);

	delete rmXP;
	return Quit();
}

RINGMAINMSG(WM_RBUTTONDOWN)
{
	rm->SubMenu(0)->Popup(hWnd);
	return 0;
}

RINGMAINCMD(OnExit)
{
	SendExit();   
}

RINGMAINMSG(WM_CREATE)
{
	//获取菜单对象
	rm = InstallCoolMenu();
	//设置顶级菜单为XP式样绘制
   rm->SetItemDrawFunc(FUNC_DRAWMENU_DEF,TRUE,FUNC_DRAWPARENT_XP);
	//设置菜单前景,背景色
	rm->SetBkgColor(GetSysColor(COLOR_HIGHLIGHT),0x00ff8080);
	
	//设置版权条
	hbmMarker = rm->SubMenu(0)->SetMarker(LoadBitmap(GetInstance(),MAKEINTRESOURCE(IDB_BITMAP2)));
   hbmBkg = LoadBitmap(GetInstance(),MAKEINTRESOURCE(IDB_BITMAP1));
	rm->SubMenu(0)->SetBkg(hbmBkg,FALSE);
   hicoC = rm->SubMenu(0)->SetItemIcon(CM_SHOWCOPYRIGHT,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON1)));
   hicoD = rm->SubMenu(0)->SetItemIcon(CM_EXIT,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON2)));
   rm->SubMenu(0)->CheckItem(CM_SHOWCOPYRIGHT);
   rm->SubMenu(0)->CheckRadioItem(1,2,1);
   rm->SubMenu(0)->CheckItem(CM_SHOWICON);
   rm->SubMenu(0)->CheckItem(CM_SHOWRECT);
   rm->SubMenu(0)->SetSelectRectType(MENURECT_DOWN);
	
	rm->SubMenu(0)->SubMenu(0)->SetColor(0x00a8a83d,MENUCOLOR_DEF,MENUCOLOR_DEF,MENUCOLOR_DEF);
	rm->SubMenu(0)->SubMenu(0)->SetBkg(IDB_TYJX);
	
	rm->SubMenu(1)->SetBkg(IDB_ZBZ);
	
	rm->SubMenu(2)->SetItemDrawFunc(FUNC_DRAWMENU_XP);
	rm->SubMenu(2)->SetItemIcon(CM_POPUPITEM1,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON1)));
	rm->SubMenu(2)->SetItemIcon(CM_POPUPITEM2,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON2)));
	rm->SubMenu(2)->SetItemIcon(CM_POPUPITEM3,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON3)));
	rm->SubMenu(2)->SetItemIcon(CM_POPUPITEM4,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON4)));
	rm->SubMenu(2)->SetItemIcon(CM_POPUPITEM5,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON5)));
	rm->SubMenu(2)->SetItemIcon(CM_POPUPITEM6,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON6)));
	rm->SubMenu(2)->SetBkgColor(0x00ffffff,0x00ff8080);
	rm->SubMenu(2)->CheckItem(CM_POPUPITEM1);
	rm->SubMenu(2)->CheckRadioItem(2,3,2);
	
   hbmHilight = LoadBitmap(GetInstance(),MAKEINTRESOURCE(IDB_BITMAP3));
	
	rmXP = new RingCoolMenu;
   rmXP->LoadPopup(MAKEINTRESOURCE(IDM_XP));
   rmXP->SetItemIcon(CM_POPUPITEM1,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON1)));
   rmXP->SetItemIcon(CM_POPUPITEM2,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON2)));
   rmXP->SetItemIcon(CM_POPUPITEM3,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON3)));
   rmXP->SetItemIcon(CM_POPUPITEM4,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON4)));
	rmXP->SetItemIcon(CM_POPUPITEM5,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON5)));
   rmXP->SetItemIcon(CM_POPUPITEM6,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_ICON6)));
   rmXP->SetBkgColor(0x00ffffff,0x00ff8080);
   rmXP->SetItemDrawFunc(FUNC_DRAWMENU_XP);

	count = 0;
	return 0;
}

RINGMAINCMD(OnShowMarker)
{
	hbmMarker = rm->SubMenu(0)->SetMarker(hbmMarker);
	rm->CheckItem(CM_SHOWCOPYRIGHT,(BOOL)!hbmMarker);
}

RINGMAINCMD(OnShowBkgBmp)
{
	if(rm->SubMenu(0)->GetItemCheckState(CM_SHOWBKG) != MF_CHECKED)
	{
		rm->SubMenu(0)->SetBkg(hbmBkg,FALSE);
		rm->SubMenu(0)->CheckRadioItem(1,2,1);
	}
}

RINGMAINCMD(OnShowBkgColor)
{
	if(rm->SubMenu(0)->GetItemCheckState(CM_SHOWBKGCOLOR) != MF_CHECKED)
	{
		rm->SubMenu(0)->SetBkgColor(0x00a8a83d,MENUCOLOR_NOCHANGE,FALSE);
		rm->SubMenu(0)->CheckRadioItem(1,2,2);
	}
}

RINGMAINCMD(OnShowSelBmp)
{
	hbmHilight = rm->SetSelectBkg(hbmHilight);
	rm->CheckItem(CM_SHOWSELECTBKG,!hbmHilight);
}

RINGMAINCMD(OnShowIcon)
{
	hicoC = rm->SubMenu(0)->SetItemIcon(CM_SHOWCOPYRIGHT,hicoC);
	hicoD = rm->SubMenu(0)->SetItemIcon(CM_EXIT,hicoD);
	rm->CheckItem(CM_SHOWICON,(BOOL)!hicoC);
}

RINGMAINCMD(OnAddItem)
{
	char x[16];
	count ++;
	wsprintf(x,"测试菜单[%d]",count);
	rm->SubMenu(0)->Insert(count,6 + count,x,BY_POSITION);
}

RINGMAINCMD(OnDelItem)
{
	count --;
	if(count >= 0)
		rm->SubMenu(0)->Delete(7 + count,BY_POSITION);
	else
		count = 0;
}